package com.huizhonglm.diap.widget.xGallery.view;

import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.PointF;
import android.os.Build;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

/**
 * This class implements method to help <b>TouchImageView</b> fling, draggin and scaling.
 */
public class XViewPager extends ViewPager {

    PointF last;
    public XImageView mCurrentView;

    public XViewPager(Context context) {
        super(context);
    }

    public XViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @TargetApi(Build.VERSION_CODES.ECLAIR)
    private float[] handleMotionEvent(MotionEvent event) {

        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                last = new PointF(event.getX(0), event.getY(0));
                break;
            case MotionEvent.ACTION_MOVE:
            case MotionEvent.ACTION_UP:
                PointF curr = new PointF(event.getX(0), event.getY(0));
                return new float[]{curr.x - last.x, curr.y - last.y};
        }
        return null;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        try {
            float[] difference = handleMotionEvent(event);
            if (mCurrentView.pagerCanScroll()) {
                return super.onTouchEvent(event);
            } else {
                //move right
                if (difference != null && mCurrentView.onRightSide && difference[0] < 0) {
                    return super.onTouchEvent(event);
                }
                //move left
                if (difference != null && mCurrentView.onLeftSide && difference[0] > 0) {
                    return super.onTouchEvent(event);
                }
                if (difference == null && (mCurrentView.onLeftSide || mCurrentView.onRightSide)) {
                    return super.onTouchEvent(event);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        try {
            float[] difference = handleMotionEvent(event);
            if (mCurrentView.pagerCanScroll()) {
                return super.onInterceptTouchEvent(event);
            } else {
                if (difference != null && mCurrentView.onRightSide && difference[0] < 0) { //move right
                    return super.onInterceptTouchEvent(event);
                }
                if (difference != null && mCurrentView.onLeftSide && difference[0] > 0) { //move left
                    return super.onInterceptTouchEvent(event);
                }
                if (difference == null && (mCurrentView.onLeftSide || mCurrentView.onRightSide)) {
                    return super.onInterceptTouchEvent(event);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}